var username;
var password;
var confirm;
var email;
var email2;
var answer;
var icno;
var firstname;
var lastname;
var address;
var city;
var state;
var postcode;
var contactno;
var dob;
function submitForm() {
    var docHeight = $(window).height();
    $('#overlay').fadeIn('fast').height(docHeight);
    var array = [];
    var allValidated = true;
    if (validateUserNoAjax(username)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (checkPassword(password)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (matchPassword(confirm)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateEmailNoAjax(email)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (matchEmail(email2)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (nonEmptyValidation(answer)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateICNoAjax(icno)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateName(firstname)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateName(lastname)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateAdd(address)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateStateOrCity(city)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateStateOrCity(state)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validatePC(postcode)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (validateContact(contactno)) {
        array.push(1);
    } else {
        array.push(0);
    }
    if (nonEmptyValidation(dob)) {
        array.push(1);
    } else {
        array.push(0);
    }

    for (var i = 0; i < array.length; i++) {
        console.log('index ' + i + ' : ' + array[i]);
        if (array[i] == 0) {
            console.log('0 found at index ' + i);
            allValidated = false;
//            break;
        }
    }
    if (allValidated) {
        $.ajax({
            type: 'POST',
            url: 'userAction.php',
            data: $('#register').serialize(),
            success: function(result) {
                if (!result.error) {
                    $('#overlay').fadeOut('fast');
                    $('#info').fadeIn('slow').addClass('success').removeClass('alert').html(result.message);
                    $('#formdiv').hide();
                } else {
                    $('#info').fadeIn('slow').delay(4000).addClass('alert').removeClass('success').html(result.message).fadeOut('slow');
                }
            }
        });
    }
}
;

function validateUsername() {
    var user = document.getElementById('user').value;
    if (user == "") {
        $('#user').addClass('error');
        $('#userError').text('Please enter username').css('display', 'block');
    } else {
        $('#user').removeClass('error');
        $('#userError').text('').css('display', 'none');
    }
}
function validatePassword() {
    var pass = document.getElementById('password').value;
    if (pass == "") {
        $('#password').addClass('error');
        $('#pswdError').text('Please enter password').css('display', 'block');
    } else {
        $('#password').removeClass('error');
        $('#pswdError').text('').css('display', 'none');
    }
}

$(document).ready(function() {
    $("#dob").datepicker({
        minDate: new Date(1900, 1 - 1, 1),
        maxDate: "+0",
        changeMonth: true,
        changeYear: true,
        dateFormat: "yy-mm-dd",
        yearRange: "1900:+0",
        hideIfNoPrevNext: true,
        showButtonPanel: true,
        showOptions: {direction: "down"}
    });
    username = document.getElementById('user');
    password = document.getElementById('password');
    confirm = document.getElementById('confirm');
    email = document.getElementById('email');
    email2 = document.getElementById('email2');
    answer = document.getElementById('answer');
    icno = document.getElementById('icno');
    firstname = document.getElementById('firstname');
    lastname = document.getElementById('lastname');
    address = document.getElementById('address');
    city = document.getElementById('city');
    state = document.getElementById('state');
    postcode = document.getElementById('postcode');
    contactno = document.getElementById('contactno');
    dob = document.getElementById('dob');
});

function nonEmptyValidation(element) {
    var elementLength = element.value.length;
    var info = document.getElementById(element.id + "Err");
    if (elementLength === 0) {
        $('#' + element.id).addClass('error');
        $("#" + info.id).text("Required Field").show();
        return false;
    } else {
        $('#' + element.id).removeClass('error');
        $('#' + info.id).hide();
        return true;
    }
}

function validateUserNoAjax(element) {
    var regExp = /^[A-Za-z]|\s+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (element.value.match(regExp)) {
            return true;
        } else {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Username should contain alphabet only").show();
            username.focus();
            return false;
        }
    } else {
        return false;
    }
}

function validateUser(element) {
    var regExp = /^[A-Za-z]|\s+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (element.value.match(regExp)) {
            $.ajax({
                type: 'POST',
                url: 'userAction.php',
                data: {action: 'checkUsername', user: $('#' + element.id).val()},
                success: function(result) {
                    if (!result.error) {
                        $('#' + element.id).removeClass('error');
                        $("#" + info.id).hide();
                    } else {
                        $('#' + element.id).addClass('error');
                        $("#" + info.id).show().html(result.message);
                    }
                }
            });
        } else {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Username should contain alphabet only").show();
            username.focus();
            return false;
        }
    } else {
        return false;
    }
}

function validateName(element) {
    var regExp = /^[A-Za-z]|\s+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (element.value.match(regExp)) {
            $('#' + element.id).removeClass('error');
            $('#' + info.id).hide();
            return true;
        } else {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Name should contain alphabet only").show();
            element.focus();
            return false;
        }
    } else {
        return false;
    }
}

function matchPassword(element) {
    var info = document.getElementById(element.id + 'Err');
    var pw = document.getElementById("password");
    if (nonEmptyValidation(element)) {
        if (pw.value !== element.value) {
            $('#' + pw.id).addClass('error');
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Both password must be the same").show();
            return false;
        } else {
            if (pw.value.length < 6) {
                $('#' + pw.id).addClass('error');
                $('#' + element.id).addClass('error');
                $("#" + info.id).text("Password must more than 6 character").show();
                return false;
            } else {
                $('#' + pw.id).removeClass('error');
                $('#' + element.id).removeClass('error');
                $('#' + info.id).hide();
                return true;
            }
        }
    } else {
        return false;
    }
}

function checkPassword(element) {
    var pwLength = element.value.length;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (pwLength < 6) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Password must more than 6 character").show();
            return false;
        } else {
            $('#' + element.id).removeClass('error');
            $("#" + info.id).hide();
            return true;
        }
    } else {
        return false;
    }
}

function matchEmail(element) {
    var info = document.getElementById(element.id + 'Err');
    var email = document.getElementById("email");
    if (nonEmptyValidation(element)) {
        if (email.value != element.value) {
            $('#' + email.id).addClass('error');
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Both email must be the same").show();
            return false;
        } else {
            $('#email').removeClass('error');
            $('#' + element.id).removeClass('error');
            $('#emailErr').hide();
            $('#' + info.id).hide();
            return true;
        }
    } else {
        return false;
    }
}

function validateEmailNoAjax(element) {
    var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(mailformat)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).show().text("Invalid email address");
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }
}

function validateEmail(element) {
    var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(mailformat)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).show().text("Invalid email address");
            return false;
        } else {
            $.ajax({
                type: 'POST',
                url: 'userAction.php',
                data: {action: 'checkEmail', email: $('#' + element.id).val()},
                success: function(result) {
                    if (!result.error) {
                        $('#' + element.id).removeClass('error');
                        $("#" + info.id).hide();
                    } else {
                        $('#' + element.id).addClass('error');
                        $("#" + info.id).show().html(result.message);
                    }
                }
            });
        }
    } else {
        return false;
    }
}

function validateICNoAjax(element) {
    var icRegex = /\d{12}/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(icRegex)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Enter a valid IC eg. 910514155410").show();
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }
}

function validateIC(element) {
    var icRegex = /\d{12}/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(icRegex)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Enter a valid IC eg. 910514155410").show();
            return false;
        } else {
            $.ajax({
                type: 'POST',
                url: 'userAction.php',
                data: {action: 'checkicno', icno: $('#' + element.id).val()},
                success: function(result) {
                    if (!result.error) {
                        $('#' + element.id).removeClass('error');
                        $("#" + info.id).hide();
                    } else {
                        $('#' + element.id).addClass('error');
                        $("#" + info.id).show().html(result.message);
                    }
                }
            });
        }
    } else {
        return false;
    }
}

function validateContact(element) {
    var mpRegex = /01[0-9]{8}/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(mpRegex)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Enter a valid mobile phone eg. 0152541695").show();
            return false;
        } else {
            $('#' + element.id).removeClass('error');
            $("#" + info.id).hide();
            return true;
        }
    } else {
        return false;
    }
}

function validateAdd(element) {
    var addRegex = /^[0-9a-zA-Z\s,'-]+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(addRegex)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("Enter alphanumeric characters only.").show();
            return false;
        } else {
            $('#' + element.id).removeClass('error');
            $("#" + info.id).hide();
            return true;
        }
    } else {
        return false;
    }
}

function validateStateOrCity(element) {
    var stateRegex = /^[A-Za-z]+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(stateRegex)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("*Enter alphabet characters only.").show();
            return false;
        } else {
            $('#' + element.id).removeClass('error');
            $("#" + info.id).hide();
            return true;
        }
    } else {
        return false;
    }
}

function validatePC(element) {
    var pcRegex = /^[0-9]+$/;
    var info = document.getElementById(element.id + "Err");
    if (nonEmptyValidation(element)) {
        if (!element.value.match(pcRegex)) {
            $('#' + element.id).addClass('error');
            $("#" + info.id).text("*Enter numeric characters only.").show();
            return false;
        } else {
            $('#' + element.id).removeClass('error');
            $("#" + info.id).hide();
            return true;
        }
    } else {
        return false;
    }
}

